package com.endoc.designpattern.product_consumer;

import java.util.ArrayList;
import java.util.List;

/**
 * 生产消费模式
 */
public class ProductConsumer {
    private ProductConsumer() {

    }

    public static ProductConsumer productConsumer = new ProductConsumer();
    //List mList = new ArrayList<Integer>();//生产容器
    int i = 0;//仓库里面的个数
    /**
     * 生产函数
     * @param number 仓库中有了多少个就不生产了
     */
    public synchronized void put(int number) {
        while (true) {
            i++;
            System.out.println(Thread.currentThread().getName()+"生产=="+i);
            if (i ==number) {
                //呼叫消费者消费
                notifyAll();
                try {
                    wait();//自己等待
                } catch (InterruptedException e) {

                }
            }
        }
    }

    /**
     * 消费函数
     *
     * @param number 消费剩余多少个就生产
     */
    public synchronized void get(int number) {
        while (true) {
            if(i>number){//如果大于0,那么消费一个
                i--;
                System.out.println(Thread.currentThread().getName()+"消费="+i);
            }
            if (i == number) {//如果消费完后,为0,表示仓库没有了
                //呼叫生产者生产
                notifyAll();
                try {
                    wait();//自己等待
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
             ProductConsumer.productConsumer.put(5);
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                ProductConsumer.productConsumer.get(3);
            }
        }).start();
        //生产方

        //消费方

    }


}
